

/**
 * @author Juan Carlos Herencia
 * con mercurial y cuenta agregada jcherenciac
 * 
 */

import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectOutputStream;
import java.util.ArrayList;
import java.util.Calendar;

public class Lista<T extends Cliente> {

	ArrayList<T> lista = null;

	public Lista() {
		lista = new ArrayList<T>();
	}
	
	/**
	 * Se añade elemento a al lista
	 * @param element
	 */
	void anadir(T element) {
		lista.add(element);
	}

	/**
	 * Metodo para mostrar la lista
	 */
	void mostrar() {
		System.out.println("Los clientes de la lista son:\n");
		for (int i = 0; i < lista.size(); i++) {
			System.out.print(i + 1 + "    ");
			System.out.println(lista.get(i));
			System.out.println();
		}
	}

	/**
	 * Metodo para modificar las puntuaciones de cada cliente
	 */
	void modificarPunt() {
		try{
			mostrar();
			int numcliente = Teclado.LeeEntero("Qué cliente quieres modificar?");
			numcliente -= 1;
			Cliente c1;
			c1 = lista.get(numcliente);
			c1.cambiarPuntuacion();
		}catch(IndexOutOfBoundsException e){
			System.err.println("FUERA DE RANGO");
			modificarPunt();
		}
		
	}
	
	/**
	 * Metodo para mostrar mayores de edad
	 */
	void mostrarMayores(){
		System.out.println("Los clientes MAYORES DE EDAD son:\n");
		
		for (int i = 0; i < lista.size(); i++) {
			Cliente c1;
			c1 = lista.get(i);
			if (c1.comprobarMayoriaEdad()){   //solo se muestran los miembros mayores de edad
				System.out.print(i + 1 + "    ");
				System.out.println(lista.get(i));
				System.out.println("  tiene "+c1.fecha_nacimiento.calculaEdad()+" años");
				System.out.println();
			}
		}
	}
	
	void mostrarMenores(){
		System.out.println("Los clientes MENORES DE EDAD son:\n");
		
		for (int i = 0; i < lista.size(); i++) {
			Cliente c1;
			c1 = lista.get(i);
			if (c1.comprobarMayoriaEdad()==false){   //solo se muestran los miembros menores de edad
				System.out.print(i + 1 + "    ");
				System.out.println(lista.get(i));
				System.out.println("  tiene "+c1.fecha_nacimiento.calculaEdad()+" años");
				System.out.println();
			}
		}
	}
	
	/**
	 * Guarda los clientes mayores de edad en un fichero
	 * @throws FileNotFoundException
	 * @throws IOException
	 */
	void guardarMayoresEnFichero() throws FileNotFoundException, IOException{
		ObjectOutputStream salida = new ObjectOutputStream(new FileOutputStream("clientes.obj"));
		for (int i = 0; i < lista.size(); i++) {
			Cliente c1;
			c1 = lista.get(i);
			if (c1.comprobarMayoriaEdad()){  
				salida.writeObject(c1);
			}
		}
	}

}